package blog

import (
	"context"

	"gitee.com/keepalived_0807/Vblog/common"
)

const (
	AppName = "blogs"
)

type Service interface {
	// 文章列表查询
	QueryBlogs(context.Context, *QueryBlogsRequest) (*BlogSet, error)

	// 文章详情
	DescribeBlog(context.Context, *DescribeBlogRequest) (*Blog, error)

	// 文章创建
	CreatedBlog(context.Context, *CreatedBlogRequest) (*Blog, error)

	// 文章更新
	UpdateBlog(context.Context, *UpdateBlogRequest) (*Blog, error)

	// 文章删除
	DeleteBlog(context.Context, *DeleteBlogRequest) (*Blog, error)

	// 文章发布
	UpdateBlogStatus(context.Context, *UpdateBlogStatusRequest) (*Blog, error)
}

type UpdateBlogStatusRequest struct {
	BlogId string `json:"blog_id"`
	*ChangedBlogStatusRequest
}

func NewQueryBlogsRequest() *QueryBlogsRequest {
	return &QueryBlogsRequest{
		PageRequest: common.NewPageRequest(),
	}
}

func NewDescribeBlogsRequest(id string) *DescribeBlogRequest {
	return &DescribeBlogRequest{
		BlogId: id,
	}
}

type QueryBlogsRequest struct {
	*common.PageRequest
	// 搜索关键字
	Keywords string `json:"keywords"`
}

type DescribeBlogRequest struct {
	// 文章ID
	BlogId string `json:"blog_id"`
}

type UpdateBlogRequest struct {
	// 博客Id
	BlogId string `json:"blog_id" validate:"required"`
	// 更新模式
	UpdateMode          common.UPDATE_MODE `json:"update_mode"`
	*CreatedBlogRequest `validate:"required"`
}

func NewUpdateBlogRequest(blogid string) *UpdateBlogRequest {
	return &UpdateBlogRequest{
		BlogId:             blogid,
		UpdateMode:         common.UPDATE_MODE_PUT,
		CreatedBlogRequest: NewCreateBlogRequest(),
	}
}

func NewUpdateBlogStatusRequest(bid string) *UpdateBlogStatusRequest {
	return &UpdateBlogStatusRequest{
		BlogId:                   bid,
		ChangedBlogStatusRequest: &ChangedBlogStatusRequest{},
	}
}

func (req *UpdateBlogRequest) Validate() error {
	return common.Validate(req)
}

type DeleteBlogRequest struct {
	// 文章ID
	BlogId string `json:"blog_id"`
}

func NewDeleteBlogsRequest(id string) *DeleteBlogRequest {
	return &DeleteBlogRequest{
		BlogId: id,
	}
}
